为了账号安全,请及时绑定邮箱和手机立即绑定

对象的三个属性

标签:
JavaScript

每一个对象都有与之相关的原型、类、可扩展性。这就是对象的三个属性

原型属性

对象的原型属性是是用来继承属性的。

类属性

对象的类属性是用来表示对象的类型信息的。

如何获得对象的类??
  1. 可以通过调用 toString() 方法,会返回这样格式的字符串 [object class]

  2. 接着提取字符串的第8个到倒数第二个位置之间的字符。

名称
  • 通过内置构造函数创建的对象,其类属性与构造函数的名称相匹配。

  • 宿主对象也有包含其意义的类属性

  • 通过对象直接量和Object.create创建的对象的类属性是“Object”

  • 自定义构造函数创建的对象的类属性也是"Object",因此,对于自定义的类来说,没办法通过类属性来区分对象的类。但是,可以通过构造器的名称来区分。

      function classof(o) {     if(o === null)return "NULL";     if(o === undefined) return "Undefined";     return Object.prototype.toString.call(o).slice(8, -1);
     } console.log(classof(1));  //Number
     console.log(classof("")); //String
     console.log(classof({})); //Object
     console.log(classof([])); //Array
     console.log(classof(new Date())); //Date
     console.log(classof(window)); //window
     console.log(classof(document)); //HTMLDocument
     function f() {} console.log(classof(new f())); //Object
    
     构造器名称的获取方法:a.constructor.name

可扩展性

对象的可扩展性用来表示是否可以给对象添加新属性

这里涉及到JS对象中有两种属性:数据属性和存取器属性
  • 对象的数据属性的特性包括:value(值), writable(可写性), enumerable (可枚举性), configurable(可配置性)一般来说,在新建一个对象属性时,默认情况下的性质都是true的。

  • 对象的存取器属性包括: get(读取), set(写入),enumerable(可枚举性),configurable(可配置性)

属性不可配置的话就说明,不可以修改其属性的可配置性和可枚举性
  • 当数据属性是不可配置的时候,就不能将它的可写性从false改为true, 但可以从true转为false(可以变坏不可以变好)

  • 当存取器属性是不可配置的时候,不能修改其getter和setter方法

所有的内置对象和自定义对象都是显示可扩展的,然后如何来设置改变这些特性呢??

  • Object.preventExtensions()  将对象设置为不可扩展,这个时候可以设置属性的相关值,但是不可以添加新的属性。

  • Object.seal() 将对象对象设置为不可扩展,同时设置对象的自有属性为不可配置

  • Object.freeze()将对象设置为不可扩展性属性不可配置,并且数据属性为只读(writable为false),但是如果对象的存取器属性具有setter方法,存取器属性将不受影响,仍可以通过属性赋值调用他们。

序列化对象

对象序列化是指将对象的状态转为字符串,即JSON.stringify()。也可以将字符串还原为对象 JSON.parse()
转为字符串的话我们还会想到另一个方法,toString(), 这个方法将返回一个表示调用这个方法的对象的字符串

  • NaN, Infinity, -Infinity序列化的结果是null,

  • 日期对象序列化后的结果是字符串,但JSON.parse()仍会保留他们的字符串状态

  • 函数、RegExp、Error对象和undefined值不能序列化和还原

  • JSON.stringify()只能序列化对象可枚举的自有属性,对于一个不能序列化的属性来说,在序列化后输出的结果会将这个属性省略掉

      var b = new Date();  var a =JSON.stringify(b);  console.log('JSON.stringify: ' + a);  console.log('toString: ' + a);  console.log('typeof(JSON.parse(a)): ' + typeof(JSON.parse(a)));  console.log('typeof(new Date()): ' + typeof(b));

https://img1.sycdn.imooc.com//5d42f5f5000115f105420152.jpg



作者:海娩
链接:https://www.jianshu.com/p/8912157a5f3e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消